/* 
 *  版本：miniOS
 *  功能：时间盘轮转，延时调度，无优先级
 *  作者：https://gitee.com/Amate123/miniOS
 *  时间：2024-11-03
 *  修改：适配Cotex-M0内核，R4-R11现场保存和恢复分开进行
 */


#ifndef	__MINIOS_CFG_H_
#define	__MINIOS_CFG_H_

#include "stdlib.h"


#define		TASK_MAX_CNT		64									// 允许的最大任务数
#define		OSTickHz			1000									// OS时钟频率


// 系统变量类型定义
typedef signed            char OS_INT8;
typedef signed short       int OS_INT16;
typedef signed             int OS_INT32;

typedef unsigned          char OS_UINT8;
typedef unsigned short     int OS_UINT16;
typedef unsigned           int OS_UINT32;



// minios_tcb
struct OS_TCB
{
	OS_UINT32 *SP;
	OS_UINT32 *STACK_BASE;
	OS_UINT32 STACK_SIZE;
	struct OS_TCB *front;
	struct OS_TCB *next;
//	OS_INT16 rdy_hash_list_index;
	OS_UINT32 Sleep_Cnt;
	OS_UINT32 Sleep_TimeOut;

	void *arg;
};


// 就绪任务链表
struct OS_RDY_LIST{
	struct 		OS_TCB *head;
	struct 		OS_TCB *tail;
	OS_UINT8  rdycnt;
};


// 睡眠任务链表
struct OS_SLEEP_LIST{
	struct 		OS_TCB *head;
	struct 		OS_TCB *tail;
	OS_UINT8  slpcnt;
};


typedef  void    (*fun_task)(void *arg);   // 任务函数指针

// OS函数
void MINI_CreatTask(struct OS_TCB *tcb, fun_task task, void *arg, \
									OS_UINT32 *stack_base, OS_UINT32 stack_size);
void MINI_OSStart(void);
void MINI_OSInit(void);
void OS_IDLE_TASK(void *arg);
void MINI_OS_Delay(OS_UINT32 ms);
void OSTask_Slp_Chk(void);
void OSTask_SwTcb(void);
void SysTick_Handler(void);

// 汇编函数
OS_UINT32	CPU_INT_Save(void);       // 保存中断状态，关闭中断
void CPU_INT_Restore(OS_UINT32 r0);	// 恢复中断状态
void OS_Trig_PendSV(void);					// 触发调度
void Set_PendSV_Lowest(void);				// 设置PendSV优先级为最低
void OS_Run_Highest(void);				  // 运行最高优先级任务（就绪链表第一个）



#endif
